Skip to content

Return non-finite floats unchanged from naturaldelta#334

Open
uttam12331 wants to merge 1 commit into
python-humanize:mainfrom
uttam12331:fix/333-naturaldelta-inf
Open

Return non-finite floats unchanged from naturaldelta#334
uttam12331 wants to merge 1 commit into
python-humanize:mainfrom
uttam12331:fix/333-naturaldelta-inf

Conversation

@uttam12331

Copy link
Copy Markdown

Summary

Closes #333.

naturaldelta()'s docstring says values it cannot convert to a timedelta are returned unchanged, and float("nan") already is. But float("inf") / float("-inf") raised an uncaught OverflowError (from int(value)) instead of being returned unchanged like nan:

>>> humanize.naturaldelta(float("nan"))
'nan'
>>> humanize.naturaldelta(float("inf"))
OverflowError: cannot convert float infinity to integer   # before
'inf'                                                      # after

Fix

Catch OverflowError and return the value unchanged only when it is non-finite. A too-large finite value — whose OverflowError comes from timedelta(seconds=...) — is still re-raised, preserving the documented Raises: OverflowError contract:

except OverflowError:
    if not math.isfinite(value):
        return str(value)
    raise

Tests

  • test_naturaldelta_non_finite — asserts nan/inf/-inf return "nan"/"inf"/"-inf".
  • test_naturaldelta_too_large_value_raises — locks in that a too-large finite value (1e30) still raises OverflowError.

Verified locally: pytest tests/test_time.py385 passed; ruff check clean.

naturaldelta() documents that values it cannot convert are returned
unchanged, and float('nan') already is. But float('inf')/float('-inf')
raised an uncaught OverflowError from int(value), instead of being returned
unchanged like nan.

Catch OverflowError and return non-finite floats unchanged. A too-large
*finite* value, whose OverflowError comes from timedelta(), is still raised,
preserving the documented OverflowError contract.

Closes python-humanize#333
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

naturaldelta() raises OverflowError on float('inf') instead of returning it unchanged

1 participant